package top.zhangjianyong.blog.service;

import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;

/**
 * 防盗链统计服务
 * 用于记录和分析防盗链攻击
 *
 * @author zhangjianyong
 * @since 2024/12/19
 */
public interface AntiHotlinkStatsService {

    /**
     * 记录防盗链攻击
     *
     * @param ip        攻击者IP
     * @param referer   Referer头
     * @param userAgent User-Agent
     * @param uri       请求URI
     * @param reason    拒绝原因
     */
    void recordAttack(String ip, String referer, String userAgent, String uri, String reason);

    /**
     * 获取指定时间范围内的攻击统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 攻击统计信息
     */
    AttackStats getAttackStats(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取热门攻击IP列表
     *
     * @param limit 限制数量
     * @return 热门攻击IP列表
     */
    java.util.List<AttackIpStats> getTopAttackIps(int limit);

    /**
     * 攻击统计信息
     */
    @Setter
    @Getter
    class AttackStats {
        // getters and setters
        private long totalAttacks;
        private long uniqueIps;
        private java.util.List<AttackIpStats> topIps;

    }

    /**
     * 攻击IP统计信息
     */
    @Setter
    @Getter
    class AttackIpStats {
        // getters and setters
        private String ip;
        private long attackCount;
        private LocalDateTime lastAttackTime;

    }
} 